package com.wrt.wm.entity;

import java.awt.Color;
import java.awt.Font;
import java.io.Serializable;
import java.util.Arrays;

import org.apache.commons.lang3.StringUtils;

import com.wrt.wm.config.StaticParameters;

import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;
import lombok.extern.log4j.Log4j2;

/**
 * 文字水印实体
 * 
 * @author 文瑞涛
 */
@Getter
@Setter
@Log4j2
public class FontParameters implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = -4324213461589530713L;

	/**
	 * 字体名称
	 */
	private String fontName;

	/**
	 * 字体大小（单位：磅）
	 */
	private Integer fontSize;

	/**
	 * 字体样式
	 */
	private Integer fontStyle;

	/**
	 * 字体颜色（字符串）
	 */
	private String color;
	/**
	 * 字体颜色（字符串）
	 */
	private String endColor;

	/**
	 * 字体颜色（Color对象）
	 */
	private Color fontColor;
	/**
	 * 字体颜色（Color对象）
	 */
	private Color fontEndColor;

	/**
	 * 旋转角度
	 */
	private Integer degree;

	/**
	 * 透明度
	 */
	private Float alpha;

	/**
	 * 字体样式，限定为普通、粗体、斜体
	 */
	@Getter(AccessLevel.NONE)
	@Setter(AccessLevel.NONE)
	private Integer[] fontStyles = {Font.PLAIN, Font.BOLD, Font.ITALIC};

	/**
	 * 
	 * 初始化字体参数
	 * 
	 */
	public void initFontParameters() {
		this.fontName = "宋体";
		this.fontSize = Integer.valueOf(45);
		this.fontStyle = Integer.valueOf(Font.PLAIN);
		this.color = "210,247,16";
		this.endColor = "247,22,3";
		this.fontColor = Color.getColor("#D2F710");
		this.fontEndColor = Color.getColor("#F71603");
		this.degree = Integer.valueOf(45);
		this.alpha = Float.valueOf(1.0F);
	}

	/**
	 * 
	 * 设定字体参数，包含校验，不符合校验条件的，保持原设定
	 * @param fp 字体参数对象
	 * 
	 */
	public void setFontParameters(FontParameters fp) {
		if (fp.validateColor()) {
			this.color = fp.getColor();
			this.fontColor = fp.gainFontColor();
		}
		if (fp.validateEndColor()) {
			this.endColor = fp.getEndColor();
			this.fontEndColor = fp.gainFontEndColor();
		}
		if (StringUtils.isNotBlank(fp.getFontName())) {
			this.fontName = fp.getFontName();
		}
		if (fp.getFontSize() != null && fp.getFontSize().intValue() != 0) {
			this.fontSize = fp.getFontSize();
		}
		if (fp.getFontStyle() != null && Arrays.asList(this.fontStyles).contains(fp.getFontStyle())) {
			this.fontStyle = fp.getFontStyle();
		}
		if (fp.getDegree() != null) {
			this.degree = fp.getDegree();
		}
		float minAlpha = 0.0F;
		if (fp.getAlpha() != null && minAlpha != fp.getAlpha().floatValue()) {
			this.alpha = fp.getAlpha();
		}
	}

	/**
	 * 
	 * 设定字体颜色
	 * @param i1 
	 * @param i2
	 * @param i3
	 *
	 */
	public void setFontColor(int i1, int i2, int i3) {
		this.fontColor = new Color(i1, i2, i3);
	}

	public void setFontColor(Color color) {
		this.fontColor = color;
	}

	/**
	 * 校验颜色参数是否正确
	 * 
	 * @return true-正确，并更新字体颜色;false-颜色参数不正确
	 */
	public boolean validateColor() {
		if (StringUtils.isNotBlank(this.color) && this.color.contains(StaticParameters.COMMA)) {
			String[] temparr = this.color.split(StaticParameters.COMMA);
			int arrsize = 3;
			if (temparr.length == arrsize) {
				int[] tempcolor = new int[arrsize];
				for (int i = 0; i < arrsize; i++) {
					try {
						tempcolor[i] = Integer.parseInt(temparr[i].trim());
					} catch (Exception e) {
						log.error(e.getMessage(), e);
						return false;
					}
				}
				this.fontColor = new Color(tempcolor[0], tempcolor[1], tempcolor[2]);
				return true;
			}
			return false;
		}

		return false;
	}

	/**
	 * 校验颜色参数是否正确
	 *
	 * @return true-正确，并更新字体颜色;false-颜色参数不正确
	 */
	public boolean validateEndColor() {
		if (StringUtils.isNotBlank(this.endColor) && this.endColor.contains(StaticParameters.COMMA)) {
			String[] temparr = this.endColor.split(StaticParameters.COMMA);
			int arrsize = 3;
			if (temparr.length == arrsize) {
				int[] tempcolor = new int[arrsize];
				for (int i = 0; i < arrsize; i++) {
					try {
						tempcolor[i] = Integer.parseInt(temparr[i].trim());
					} catch (Exception e) {
						log.error(e.getMessage(), e);
						return false;
					}
				}
				this.fontEndColor = new Color(tempcolor[0], tempcolor[1], tempcolor[2]);
				return true;
			}
			return false;
		}

		return false;
	}

	/**
	 * 
	 * 获取字体颜色设定
	 * 
	 * @return 获得颜色RGB值
	 *
	 */
	public String getFontColor() {
		int[] temp = { this.fontColor.getRed(), this.fontColor.getGreen(), this.fontColor.getBlue() };
		return Arrays.toString(temp);
	}

	/**
	 *
	 * 获取字体颜色设定
	 *
	 * @return 获得颜色RGB值
	 *
	 */
	public String getFontEndColor() {
		int[] temp = { this.fontEndColor.getRed(), this.fontEndColor.getGreen(), this.fontEndColor.getBlue() };
		return Arrays.toString(temp);
	}

	/**
	 * 
	 * 获取字体颜色Color对象
	 * 
	 * @return 
	 *
	 */
	public Color gainFontColor() {
		return this.fontColor;
	}

	/**
	 *
	 * 获取字体颜色Color对象
	 *
	 * @return
	 *
	 */
	public Color gainFontEndColor() {
		return this.fontEndColor;
	}

	/**
	 * 
	 * 创建字体对象
	 */
	public Font createFont() {
		return new Font(this.fontName, this.fontStyle.intValue(), this.fontSize.intValue());
	}
}
